/***************************************************
> Copyright (C) 2024 ==KINGYI== All rights reserved.
> File Name: serverfun.h
> Author:luohong
> Mail: 750232205@qq.com
> Created Time: 2024年09月21日 星期六 17时07分58秒
***************************************************/

#ifndef _SERVERFUN_H_
#define _SERVERFUN_H_

#include <mysql/mysql.h>
#include "queue.h"
#include "queuetask.h"
#include "cJSON.h"
#include "queueEquInfo.h"

struct userInfo{
    int id;
    char name[10];
    char passwd[20];//密码
    int waterid;//水表id
    int elecid;//电表id
    int waterbalance;//水表余额
    int elecbalance;//电表余额
    char phoneNumber[15];//手机号码
};
struct userlist{
    struct userInfo data;
    struct userlist *next;
};


struct managerInfo{
    int id;
    char name[10];
    char passwd[20];//密码
    char phoneNumber[15];//手机号码
};

struct managerlist{
    struct managerInfo data;
    struct managerlist *next;
};

struct rechrecord{
    int id;//用户id;
    char name[20];
    char rechtype[15];//充值类型 水费或者电费
    int fee;//充值金额
    char rechTime[30];//充值时间
};

struct operrecord{
    char operation[10];//操作类型 断水，断电，开水，开电
    char reason[20];//操作原因
    int equid;//被操作的表的id
    char euqType[10];//被操作的表的类型
    char operTime[30];//操作时间
};

//登录注册通信协议结构体
struct login_register{
    int identity;
    char type[10];
    int id;
    char pwd[20];
    char name[10];
    char phoneNumber[15];//手机号码
};

//绑定解绑通信协议结构体
struct bindEquit{
    char type[10];
    int equtype; //1-water 2_elec
    int uid;
    int eid;
};

//充值通信协议结构体
struct top_up{
    char type[10];
    int equtype;
    int id;//用户id
    int money;
};

//查看信息通信协议结构体
struct check_infor{
    char type[10];
    int id;
};

//服务器-》设备端
struct waterorelec_fee{
    int equtype;
    int fee;
};
//设备端-》服务器
struct equipment{
    char type[10];
    int waterid;
    int elecid;
    int waterbalance;
    int elecbalance;
};

//设备端地址链表
struct addr{
    struct sockaddr_in equaddr;
    int waterid;
    int elecid;
};
struct addrlist{
    struct addr data;
    struct addrlist *next;
};

//连接并初始化数据库
void initDB();
//加载用户信息到链表
void initUserInfoList();
//加载管理员信息到链表
void initManagerInfoList();
//登录
int login(struct msg msge);
//注册
void uormregister(struct msg msge);
//绑定设备
void bindEqu(struct task msge);
//解绑设备
void unbingEqu(struct task msge);
//充值
void _recharge(struct info infor);
//查看个人信息
void getuserinfo(struct task msge);
//查看充值记录
void getRechRecord(struct task msge);
//查看远程控制记录
void getOperrecord(struct task msge);
//通知低额或者欠费

//查看某个用户的信息

//

//退出

//设备端
//接收设备端采集到的数据并处理
void recvfromEqu(struct info infor);

//释放用户链表
void freeuserlist(struct userlist *uhead);
//释放管理员信息链表
void freemanlist(struct managerlist *mhead);


#endif
